package com.shiguang.springboot.config;


import com.shiguang.springboot.annotation.ShiGuangConditionalOnClass;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Map;

public class ShiGuangOnClassCondition implements Condition {
	/**
	 * 匹配对应的JAR包，返回WEB
	 * @param context
	 * @param metadata
	 * @return
	 */
	@Override
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		//拿到@ShiGuangConditionalOnClass中的value属性，然后用类加载器进行加载，如果加载到了所指定的这个类，
		// 那就表示符合条件，如果加载不到，则表示不符合条件。
		Map<String, Object> annotationAttributes =
				metadata.getAnnotationAttributes(ShiGuangConditionalOnClass.class.getName());
		String className = (String) annotationAttributes.get("value");
		try {
			context.getClassLoader().loadClass(className);
			return true;
		} catch (ClassNotFoundException e) {
			return false;
		}
	}
}
